﻿/*********************************************************************
 ****  此代码由 周渊 编码。
 ****  运行时版本:2.0.50727.3053
 ****  对此文件的更改可能会导致不正确的行为，
 ****  用于处理   生成通讯协意
 ****  编码时间   2010-5-1 15:19:15
 ****  描    述： <ICenter3.0 Arcgip地图线路操作封装>
 ****  创 建 者： <周渊>
 ****  修改标识:
*********************************************************************/
namespace Bocom.ICenter.UI.Silverlight.Common.Maps
{
    using System;
    using System.Windows.Shapes;
    using System.Linq;
    using ESRI.ArcGIS.Client;
    using ESRI.ArcGIS.Client.Symbols;
    using ESRI.ArcGIS.Client.Geometry;

    /// <summary>
    /// Arcgis 地图操作封装类
    /// </summary>
    public abstract class ArcgisMapBase : System.Windows.DependencyObject, System.ComponentModel.INotifyPropertyChanged
    {
        #region 定义属性
         Map _Map = null;

        protected Map Map
        {
            get { return _Map; }
        }

        /// <summary>
        /// 图标表示的意思 可视化样式定义
        /// </summary>
        ArcgisMapIconStyle _ArcgisMapIconStyle = new ArcgisMapIconStyle();

        /// <summary>
        /// 图标表示的意思 可视化样式定义
        /// </summary>
        public ArcgisMapIconStyle ArcgisMapIconStyle
        {
            get { return _ArcgisMapIconStyle; }
        }

        #endregion

        #region 定义依赖项属性

        /// <summary>
        /// 用户定议的标识
        /// </summary>
        public static readonly System.Windows.DependencyProperty TokenProperty = System.Windows.DependencyProperty.Register("Token", typeof(object), typeof(ArcgisMapBase), new System.Windows.PropertyMetadata(null, new System.Windows.PropertyChangedCallback(
            //当设定一个有效的值的时候,返回的回调用函数
                (d, e) =>
                {
                    //执行设定值的事件
                    ArcgisMapBase arcgisMapAbstract = ((ArcgisMapBase)d);
                    arcgisMapAbstract.Token = e.NewValue;
                }
        )));
        /// <summary>
        /// 用户定议的标识
        /// </summary>
        public object Token
        {
            get
            {
                return GetValue(TokenProperty);
            }
            set
            {
                if (GetValue(TokenProperty) != value)
                {
                    SetValue(TokenProperty, value);
                }
            }
        }

        #endregion

        /// <summary>
        /// 实例化对像
        /// </summary>
        /// <param name="map">地图</param>
        public ArcgisMapBase(Map map)
        {
            _Map = map;
            //不显示Arcgis的商标
            _Map.IsLogoVisible = false;
            if (map.Layers["gLayer"] as GraphicsLayer == null)
            {
                throw new Exception("地图中不包括 ID 为 gLayer 的图层 或者图层类型不是 GraphicsLayer");
            }
        }

        #region INotifyPropertyChanged 成员

        public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
        /// <summary>
        /// 实现 属性改变的方法
        /// </summary>
        /// <param name="propertyName"></param>
        protected virtual void OnPropertyChanged(string propertyName)
        {
            if (this.PropertyChanged != null)
            {
                this.PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
            }
        }


        #endregion

    }
}
